﻿namespace ConsoleApp4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建事件发布者对象
            EventPublisher publisher = new EventPublisher();

            // 创建事件订阅者对象
            EventSubscriber subscriber = new EventSubscriber();

            // 订阅事件
            publisher.MyEvent += subscriber.HandleEvent;

            // 触发事件
            publisher.RaiseEvent();

            Console.ReadLine();
        }
    }


    // 定义事件发布者类
    class EventPublisher
    {
        // 定义委托类型
        public delegate void MyEventHandler(object sender, EventArgs e);

        // 声明事件
        public event MyEventHandler MyEvent;

        // 触发事件的方法
        public void RaiseEvent()
        {
            Console.WriteLine("Event raised!");
            // 触发事件
            OnMyEvent(EventArgs.Empty);
        }

        // 触发事件的保护方法
        protected virtual void OnMyEvent(EventArgs e)
        {
            MyEventHandler handler = MyEvent;
            if (handler != null)
            {
                handler(this, e);
            }
        }
    }

    // 定义事件订阅者类
    class EventSubscriber
    {
        // 事件处理方法
        public void HandleEvent(object sender, EventArgs e)
        {
            Console.WriteLine("Event handled by EventSubscriber");
        }
    }
}